VS Codeのtext transformの実装
VS Code Conference 2024発表準備の中で調べる
AbstractCaseAction
EditorActionを継承した抽象クラス
public method
runを実装
EditOperation.replace(wordRangeまたはselection, this._modifyText(text, wordSeparators))
protected method
_modifyText
AbstractCaseActionを継承した具体クラスたち
_modifyTextを実装
JavaScriptの関数を使っている
UpperCaseAction
LowerCaseAction
正規表現を使っている!
TitleCaseAction
単語の先頭の文字を取り出す正規表現と思われる
小文字にしてから、単語の先頭の文字を取り出す
キャプチャグループもあるが、関数で使われていない
'(^|[^\\p{L}\\p{N}\']|((^|\\P{L})\'))\\p{L}'(RegExpに渡すパターン) \\となっているのはエスケープ。\として読める(\p, \P)
code:js
'(^)\\p{L}' // 行頭 /(^)\p{L}/gmu
'(((^|\\P{L})\'))\\p{L}' // 行頭またはLでない の後に シングルクォート
code:javascript
'hello world'.match(new RegExp('(^)\\p{L}', 'gmu')) // "h" 'hello \'world'.match(new RegExp('(((^|\\P{L})\'))\\p{L}', 'gmu')) // 'w"
SnakeCaseAction
_を追加するようにreplace
CamelCaseAction
全ての単語以外でword.substring(0, 1).toLocaleUpperCase()
lowerCamelCaseのようにする
PascalCaseAction
CamelCaseが全単語に適用される(先頭にも)
UpperCamelCaseのようにする
KebabCaseAction
-を追加するようにreplace
registerEditorActionされる
EditorContributionRegistryにregisterされている